/**
 * 仿JSON内置API parse方法
 * @param {*} javaData  JSON数据格式
 * @returns Object
 */


function parse(javaData) {
    //封装JSON.parse
    // let javaData ='{"uname":"molly","age":18}'
    //1.1过滤字符串(注：去掉 " {},空格) =>'uname:molly,age:18'
    let str = javaData.replace(/({|}|\s)/g, '')
    //1.2安装[,]分割转数组  ['uname:molly','age:18']
    let arr = str.split(',')
    //1.4遍历上面定义空数组
    let jsonObj = {}
    //1.3遍历数组 item='uname:molly'
    arr.forEach(item => {
        //1.5遍历里面：按照【:】分割
        let temp = item.split(':')  // ['uname','molly']
        //1.6遍历里面：数组的第一个值就是键，第二个是值
        // obj[temp[0]] = isNaN(Number(temp[1])) ? temp[1] : Number(temp[1])
        // })
        temp[0] = temp[0].replace(/("|\s)/g, '')
        temp[1] = temp[1].replace(/\s/g, '')
        if (temp[1] === 'true' || temp[1] === 'false') {
            temp[1] = Boolean(temp[1])
        }
        else if (temp[1] === '"true"' || temp[1] === '"false"') {
            temp[1] =Boolean(temp[1]).toString()
        }
        else if (temp[1] === 'null') {
            temp[1] = null
        }
        else if (temp[1] === '"null"') {
            temp[1] = 'null'
        }
        else if (temp[1] === 'undefined') {
            //不用判断，json没有判断undefined
            temp[1] = undefined
        } else if (isNaN(Number(temp[1]))) {
            temp[1] = temp[1].replace(/"/g, '')
        } else {
            temp[1] = Number(temp[1])
        }
        jsonObj[temp[0]] = temp[1]
    })

    return jsonObj
}
//测试
let str = '{"a": true, "new": "true", "b": 2, "d": "3", "c": "汉字", "e": null, "g": "null", "h": "undefined"}'
// 对比测试
console.log(JSON.parse(str));
console.log(parse(str));


// --------------------------------------------------------------------------------------
/**
 * 名称 仿写JSON.stringify
 * @param {*} str --输入一个对象类型
 * @returns --返回一个字符串类型
 */var obj = {a :111,b:"好好好",c:true }
 function stringify(obj){
    var str = ""
   for(let key in obj) {
       str += key + ":" + obj[key] + ",";
   }
   str = str.slice(0,-1);
   return str;
}